package com.wgy.day23.泛型;

import java.util.ArrayList;
import java.util.Iterator;

/*
当使用泛型或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示.但是一旦使用泛型的通配符后,
只能使用Object类中的共性方法,集合中元素自身方法无法使用

泛型通配符: <?>:代表任意的数据类型
使用方式: 不能创建对象使用
        只能作为方法的参数使用
高级使用方式:之前设置的泛型的时候,实际上是可以任意设置的,只要是类就可以设置,但是在Java的泛型中可以指定一个泛型的上限和下限
泛型的上限: 格式: 类型名称<? extends 类> 对象名称
          意义:只能接收该类型及其子类
泛型的下限: 格式: 类型名称<? super 类> 对象名称
          意义:只能接收该类型及其父类型
例如:Demo06Generic通配符

        */
public class Demo05Generic通配符 {
    public static void main(String[] args) {
        ArrayList<Integer> list01=new ArrayList<>();
        list01.add(1);
        list01.add(2);

        ArrayList<String> list02=new ArrayList<>();
        list02.add("a");
        list02.add("b");

    }
    /*定义一个方法.能遍历所以类型的ArrayList集合
    * 这时候我们不知道ArrayList集合使用什么类型的数据,可以使用泛型的通配符来接收数据类型*/
    public static void printArrayList(ArrayList<?> list){
        //使用迭代器遍历
        Iterator it=list.iterator();
        while(it.hasNext()){
            //it.next()方法,取出的元素类型各式各样,就用Object接收,可以接收任意的数据类型
            Object obj = it.next();
            System.out.println(obj);
        }

    }
}
